#pragma once

#define INITGUID

#include <list>
#include "IEngineComponent.h"
#include "EnginePointer.h"
#include "MessageQueue.h"

// {CFFC0C2A-3425-4eea-9C9F-B90EAD064227}
DEFINE_GUID(INPUT_COMPONENT_GUID, 
0xcffc0c2a, 0x3425, 0x4eea, 0x9c, 0x9f, 0xb9, 0xe, 0xad, 0x6, 0x42, 0x27);

class InputComponent :
	public IEngineComponent
{
public:
	InputComponent(void);
	~InputComponent(void);

	void SetMessageQueue(EnginePointer<IMessageQueue>& messages);

	GUID getSystemIdentifier();
	GUID getComponentIdentifier();

	virtual void getDownBindings(BYTE** bindings, DWORD* nBindings) {*bindings = NULL; *nBindings = 0;}
	virtual void getHoldBindings(BYTE** bindings, DWORD* nBindings) {*bindings = NULL; *nBindings = 0;}
	virtual void getUpBindings(BYTE** bindings, DWORD* nBindings) {*bindings = NULL; *nBindings = 0;}

	virtual void keyDown(BYTE key, LONGLONG timeElapsed) {UNREFERENCED_PARAMETER(key); UNREFERENCED_PARAMETER(timeElapsed);}
	virtual void keyHold(BYTE key, LONGLONG timeElapsed) {UNREFERENCED_PARAMETER(key); UNREFERENCED_PARAMETER(timeElapsed);}
	virtual void keyUp(BYTE key, LONGLONG timeElapsed) {UNREFERENCED_PARAMETER(key); UNREFERENCED_PARAMETER(timeElapsed);}
protected:
	EnginePointer<IMessageQueue> messages;
};
